const app=getApp()
const db=wx.cloud.database();
// pages/yaoxiang/yaoxiang.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    healthTips:[],


    temperature:20,
    humidity:20,
    smoke:40,
    checked: false,
    shadowTimer: null,
    isRequesting: false // 防止请求重叠
  },
  gettips() {
    db.collection("medical_analysis").where({
      account:app.globalData.account
    }).get().then(res => {
      console.log("获取健康提示成功:", res);
      // 从所有文档中提取tips并合并为一个数组
      const allTips = res.data.flatMap(item => item.tips);
      
      this.setData({
        healthTips: allTips,
      });
    }).catch(err => {
      console.error("获取健康提示失败:", err);
      wx.showToast({
        title: '获取健康提示失败',
        icon: 'none'
      });
    });
  },
 



/**
     * 获取token按钮按下：
     */
    gettoken(){
      var that=this;  
      wx.request({
        url: 'https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens',
        data: {
          "auth": {
            "identity": {
              "methods": [
                "password"
              ],
              "password": {
                "user": {
                  "domain": {
                    "name": "GT-2301_81266702"
                  },
                  "name": "GT-2301_81266702",
                  "password": "Lmcindy6388"
                }
              }
            },
            "scope": {
              "project": {
                "name": "cn-east-3"
              }
            }
          }
        },
        method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
        header: {'content-type': 'application/json' }, // 请求的 header 
        success: function(res){
            console.log("获取token成功");//打印完整消息
            var token='';
token=JSON.stringify(res.header['X-Subject-Token']);//解析消息头token
token=token.replaceAll("\"", "");
// console.log("获取token=\n"+token);//打印token
wx.setStorageSync('token',token);//把token写到缓存中,以便可以随时随地调用
        },
        fail:function(){
            console.log("获取token失败");//打印完整消息
        },
        complete: function() {
            console.log("获取token完成");//打印完整消息
        } 
    });
    },
    getshadow:function(){
      if (this.data.isRequesting) return; // 如果正在请求，则跳过
      this.setData({ isRequesting: true }); // 加锁
      // console.log("开始获取影子");//打印完整消息
      var that=this;  
      var token=wx.getStorageSync('token');//读缓存中保存的token
      // console.log("我的toekn:"+token);//打印完整消息
      wx.request({
          url: 'https://92aad16b61.st1.iotda-app.cn-east-3.myhuaweicloud.com:443/v5/iot/72dbf1784ff04685985c53fba5220913/devices/6810ab2d3878983101479033_smart_pill_box_lm/shadow',
          data:'',
          method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
          header: {'content-type': 'application/json',
          'X-Auth-Token':token ,
          'Cache-Control': 'no-cache' // 禁用缓存
        }, //请求的header 
          success: function(res){
              // console.log(res);//打印完整消息
              var shadow=JSON.stringify(res.data.shadow[0].reported.properties);
// 直接从设备影子数据中提取数值（不经过 JSON.stringify）
var reported = res.data.shadow[1].reported.properties;
var temperature = parseFloat(reported.temperature); // 直接转为数字
var humidity = parseFloat(reported.humidity);
var smoke = parseFloat(reported.smoke);
var reported = res.data.shadow[1]?.reported?.properties; // 安全访问
if (reported) {
  that.setData({
    temperature: parseFloat(reported.temperature),
    humidity: parseFloat(reported.humidity),
    smoke: parseFloat(reported.smoke)
  });
}
          },
          fail:function(){
              // fail
              console.log("获取影子失败");//打印完整消息
          },
          complete: function() {
              that.setData({ isRequesting: false }); // 解锁
          } 
      });
  },



// 发送找回药箱命令
sendfind() {
  console.log("开始下发命令...");
  const that = this;
  const token = wx.getStorageSync('token');

  wx.request({
    url: 'https://92aad16b61.st1.iotda-app.cn-east-3.myhuaweicloud.com:443/v5/iot/72dbf1784ff04685985c53fba5220913/devices/6810ab2d3878983101479033_smart_pill_box_lm/commands',
    data: {
      "service_id": "get_data",
      "command_name": "set_daojishi",
      "paras": {
        "countdown": 1
      }
    
    },
    method: 'POST',
    header: {
      'content-type': 'application/json',
      'X-Auth-Token': token
    },
    success: function(res) {
      console.log("下发命令成功");
      //console.log(res);
       // 关键修复：检查状态码
       if (res.statusCode !== 200) {
        console.error("命令下发失败，状态码:", res.statusCode);
        that.setData({ checked: false });
        wx.showToast({ title: '失败:设备可能离线', icon: 'none' });
        return; // 终止后续逻辑
      }
    },
    fail: function(err) {
      console.log("命令下发失败");
      console.log("请先获取token");
      that.setData({ checked: false }); // 失败时也复位
      wx.showToast({ title: '失败', icon: 'none' });
    },
    complete: function() {
      console.log("命令下发完成");
      that.setData({ result: '设备命令下发完成' });
    }
  });
},






//找回
find(){
wx.showModal({
  title:'是否找回药箱',
  showCancel: true, // 确保显示取消按钮
  success:(res)=>
  {
    if (res.confirm) {
      // 用户确认找回药箱，调用发送命令的方法
      this.sendfind();
      wx.showToast({
        title: '已发送找回命令',
        icon: 'none'
      });
    } else {
      // 用户取消操作，不执行任何逻辑，也不显示任何提示
      console.log("用户取消了找回药箱操作");
    }
  }
})
},
  onChange(event) {
    const { checked } = this.data; // 获取当前开关状态
    const newChecked = event.detail; // 获取切换后的状态
    
    wx.showModal({
      title: '提示',
      content: '确定要开柜吗？',
      success: (res) => {
        if (res.confirm) {
          this.setData({ checked: true }); // 先切换到开状态
          this.sendOpenCommand(); // 发送开柜命令
        } else {
          this.setData({ checked: false }); // 用户取消，保持关闭
        }
      },
    });
  },
 // 发送开柜命令（3秒后自动复位开关）
 sendOpenCommand() {
  console.log("开始下发命令...");
  const that = this;
  const token = wx.getStorageSync('token');

  wx.request({
    url: 'https://92aad16b61.st1.iotda-app.cn-east-3.myhuaweicloud.com:443/v5/iot/72dbf1784ff04685985c53fba5220913/devices/6810ab2d3878983101479033_smart_pill_box_lm/commands',
    data: {
      "service_id": "get_data",
      "command_name": "motor_control",
      "paras": {
        "onoff": "ON"  // 发送开柜命令
      }
    },
    method: 'POST',
    header: {
      'content-type': 'application/json',
      'X-Auth-Token': token
    },
    success: function(res) {
      console.log("下发命令成功");
      //console.log(res);
       // 关键修复：检查状态码
       if (res.statusCode !== 200) {
        console.error("命令下发失败，状态码:", res.statusCode);
        that.setData({ checked: false });
        wx.showToast({ title: '开柜失败:设备可能离线', icon: 'none' });
        return; // 终止后续逻辑
      }
     // wx.showToast({ title: '柜门已打开', icon: 'success' });
        // 只有真正成功时才执行以下逻辑
        console.log("下发命令成功");
        wx.showToast({ title: '柜门已打开', icon: 'success' });

        
      // 3秒后自动复位开关（不发送关柜命令）
      setTimeout(() => {
        that.setData({ checked: false });
        that.sendCloseCommand(); // 调用关柜方法
      }, 3000);
    },
    fail: function(err) {
      console.log("命令下发失败");
      console.log("请先获取token");
      that.setData({ checked: false }); // 失败时也复位
      wx.showToast({ title: '开柜失败', icon: 'none' });
    },
    complete: function() {
      console.log("命令下发完成");
      that.setData({ result: '设备命令下发完成' });
    }
  });
},
// 新增：发送关柜命令
sendCloseCommand() {
  console.log("开始下发关柜命令...");
  const token = wx.getStorageSync('token');

  wx.request({
    url: 'https://92aad16b61.st1.iotda-app.cn-east-3.myhuaweicloud.com:443/v5/iot/72dbf1784ff04685985c53fba5220913/devices/6810ab2d3878983101479033_smart_pill_box_lm/commands',
    data: {
      "service_id": "get_data",
      "command_name": "motor_control",
      "paras": {
        "onoff": "OFF"  // 发送关柜命令
      }
    },
    method: 'POST',
    header: {
      'content-type': 'application/json',
      'X-Auth-Token': token
    },
    success: function(res) {
      console.log("关柜命令下发成功");
      if (res.statusCode !== 200) {
        console.error("关柜命令下发失败，状态码:", res.statusCode);
        wx.showToast({ title: '关柜失败:设备可能离线', icon: 'none' });
        return;
      }
      wx.showToast({ title: '柜门已关闭', icon: 'success' });
    },
    fail: function(err) {
      console.log("关柜命令下发失败");
      wx.showToast({ title: '关柜失败', icon: 'none' });
    }
  });
},
  

/**
   * 启动影子数据轮询（每2秒一次）
   */
  startShadowPolling() {
    // 先立即获取一次数据
    this.getshadow();

    // 设置定时器，每2秒获取一次
    this.data.shadowTimer = setInterval(() => {
      if (!this.data.isRequesting) {
        this.getshadow();
      }
    }, 2000);
  },

  /**
   * 停止影子数据轮询
   */
  stopShadowPolling() {
    if (this.data.shadowTimer) {
      clearInterval(this.data.shadowTimer);
      this.data.shadowTimer = null;
    }
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
this.gettoken();

this.startShadowPolling(); // 启动轮询
db.collection("medicine").watch({
  onChange:res=>{
    this.gettips();
  },
  onError:err=>{
    console.log(err);
  }
})
this.gettips()
  },



//根据身份跳转至不同药品详情
medicine(){
  if(app.globalData.userType=="管理员"){
  wx.navigateTo({
    url: '/pages/ypxq/ypxq',
  })
}else{
  wx.navigateTo({
    url: '/pages/ypxquser/ypxquser',
  })
}
},
//开柜
open(){

},
//跳转至取药页面
take(){
  wx.navigateTo({
    url: '/pages/takemedicines/takemedicines',
  })
},
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.gettips()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    this.stopShadowPolling(); // 页面卸载时清除定时器
  
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})